iT邦幫忙

0

Day 15 | 編輯待辦事項:PATCH 和 PUT 差在哪

  • 分享至 

  • xImage
  •  

今天補上編輯功能,讓打錯字的待辦事項可以直接修改,不用刪掉重來。

今天做的事
後端新增一支PATCH /api/todos/:id,只更新標題欄位,驗證邏輯沿用新增時的規則(不能空白、不能超過 50 字):

app.patch('/api/todos/:id', (req, res) => {
  const id = Number(req.params.id);
  const title = (req.body.title || '').trim();

  if (!title) {
    return res.status(400).json({ message: '待辦事項內容不能是空白' });
  }

  db.run('UPDATE todos SET title = ? WHERE id = ?', [title, id], function (err) {
    if (err) return res.status(500).json({ message: '資料庫錯誤' });
    if (this.changes === 0) {
      return res.status(404).json({ message: '找不到這筆待辦事項' });
    }
    res.json({ id, title });
  });
});

前端在每個項目旁加了「編輯」按鈕,點下去用 prompt() 跳出輸入框,確認後送出 PATCH 請求,成功就直接更新畫面上的文字。

觀察

  • PUT是整筆換掉,PATCH是只改其中幾個欄位。第八天的切換完成狀態嚴格說也只改一個欄位,用PATCH比較貼切,只是當時為了簡單用了PUT
  • prompt()在使用者按取消時會回傳null,要先判斷if (newTitle === null) return,不然會把null送給後端。按取消和按確定但留空白,是兩種不同的情況
  • 編輯按鈕在裡面,跟刪除按鈕一樣需要e.stopPropagation(),不然點編輯會同時觸發切換完成
  • 後端的驗證我又寫了一次,跟新增那邊幾乎一樣。這讓我開始覺得重複的程式碼變多了,這也是後面要整理程式結構的原因

心得
今天體會到HTTP方法的選擇不只是形式,而是在告訴別人這個API做什麼事。同樣是更新,整筆取代跟局部修改是不同的語意。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言